package com.adminserver.util.DateGenerator;

import cn.hutool.core.date.*;
import cn.hutool.core.lang.Console;
import cn.hutool.core.util.RandomUtil;
import lombok.extern.slf4j.Slf4j;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

@Slf4j
public class DateGenerator {

    /**
     * 获取某年的开始和结束时间
     *
     * @param year 年
     * @return String[]{beginOfYear, endOfYear}
     */
    public static String[] getYearBeginEndTime(int year) {
        Calendar calendar = new GregorianCalendar();
        calendar.set(Calendar.YEAR, year);

        String beginOfYear = DateUtil.format(DateUtil.beginOfYear(calendar).getTime(), DatePattern.NORM_DATETIME_PATTERN);
        String endOfYear = DateUtil.format(DateUtil.endOfYear(calendar).getTime(), DatePattern.NORM_DATETIME_PATTERN);

        return new String[]{beginOfYear, endOfYear};
    }

    /**
     * 获取某年中某月的开始和结束时间
     *
     * @param year  年
     * @param month 月 默认从0开始
     * @return String[]{beginOfMonth, endOfMonth}
     */
    public static String[] getYearInMonthBeginEndTime(int year, int month) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month);

        String beginOfMonth = DateUtil.format(DateUtil.beginOfMonth(calendar).getTime(), DatePattern.NORM_DATETIME_PATTERN);
        String endOfMonth = DateUtil.format(DateUtil.endOfMonth(calendar).getTime(), DatePattern.NORM_DATETIME_PATTERN);

        return new String[]{beginOfMonth, endOfMonth};
    }

    /**
     * 生成指定范围内的随机年
     *
     * @param year 年范围
     * @return 范围内的某年
     */
    public static String RandomDateTime(int[] year) {
        DateTime dateTime = DateUtil.date();
        dateTime.setField(DateField.YEAR, year[RandomUtil.randomInt(0, year.length)]);
        dateTime.setField(DateField.MONTH, RandomUtil.randomInt(1, 13));

        if (dateTime.getField(DateField.MONTH) != 2) {
            dateTime.setField(DateField.DAY_OF_MONTH, RandomUtil.randomInt(1, 31));
        } else {
            dateTime.setField(DateField.DAY_OF_MONTH, RandomUtil.randomInt(1, 29));
        }

        dateTime.setField(DateField.HOUR_OF_DAY, RandomUtil.randomInt(0, 25));
        dateTime.setField(DateField.MINUTE, RandomUtil.randomInt(0, 60));
        dateTime.setField(DateField.SECOND, RandomUtil.randomInt(0, 60));
        return DateUtil.format(dateTime, DatePattern.NORM_DATETIME_PATTERN);
    }

    /**
     * 随机生成某年 默认 当年 和 前4年
     *
     * @return 某年
     */
    public static String RandomDateTime() {
        int[] year = {
                DateUtil.date().year(),
                DateUtil.date().offset(DateField.YEAR, -1).year(),
                DateUtil.date().offset(DateField.YEAR, -2).year(),
                DateUtil.date().offset(DateField.YEAR, -3).year(),
                DateUtil.date().offset(DateField.YEAR, -4).year(),
        };
        log.info("随机年范围 {}", year);
        return RandomDateTime(year);
    }
}
